package cn.lucky.thread.method;

/**
 * @Author:蒋凌鹏
 * @Date:2020/9/16
 * @Explain:javaseries
 *
 * join() ：join方法主要的作用就是同步，它可以是的线程之间的并发执行变为串行执行
 *  join方法的作用:在A线程中调用B线程的join方法，A线程会进入阻塞状态，只有当B线程执行完毕之后，A线程才会继续执行
 *  参数：join方法中可以带参数，参数类型为long，带参数的含义是B线程执行10毫秒之后，A线程才继续执行
 *  jdk规定：join方法的参数为0表示和不带参数的效果一样
 *  join方法只有在线程调用start，也就是启动线程之后才会生效
 *  例子：在主线程main中调用了t1的join方法，当前main线程就会进入阻塞状态，只有当t1线程执行10毫秒之后，main线程才会继续执行
 */
public class JoinMethod {
    //主线程
    public static void main(String[] args) {
        //t1线程
        Thread t1 = new Thread() {
            @Override
            public void run() {
                for (int i = 0; i < 100; i++) {
                    if (i % 2 == 0) {
                        System.out.println(currentThread().getName() + ":" + i);
                    }
                }
            }
        };
        t1.start();

        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + ":" + i);
            }
            if (i == 20) {
                try {
                    t1.join();//主线程中调用t1线程的join方法,会使得主线程进入阻塞状态.
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
